package de.g18.gruppe3.common.ldap;

import java.util.List;

import de.g18.gruppe3.common.exception.ServiceException;
import de.g18.gruppe3.common.exception.UserAlreadyExistsException;
import de.g18.gruppe3.common.exception.UserNotFoundException;
import de.g18.gruppe3.common.model.User;

/**
 * LDAP-Schnittstelle zum arbeiten mit Benutzern.
 *
 * @author <a href="mailto:kevinhuber.kh@gmail.com">Kevin Huber</a>
 */
public interface UserService {

	/**
	 * Erstellt einen Benutzer
	 *
	 * @param aUser User der hinzugefügt werden soll
	 * @return Das persistierte Benutzer-Objekt
	 *
	 * @throws UserAlreadyExistsException Falls der Benutzer bereits existiert
	 */
	User createUser(User aUser) throws ServiceException, UserAlreadyExistsException;

    /**
     * Sucht einen Benutzer anhand seines Logins
     *
     * @param aLogin Login des Benutzers der geladen werden soll
     *
     * @throws UserNotFoundException Falls kein Benutzer mit dem login gefunden wurde
     */
	User getUserByLogin(String aLogin) throws ServiceException, UserNotFoundException;

	/**
	 * Löscht einen Benutzer
	 *
	 * @param aUser Benutzer der gelöscht werden soll
	 */
	void deleteUser(User aUser) throws ServiceException;

    /**
     * Liefert eine Liste aller Benutzer zurück
     */
	List<User> getAllUsers();
}
